#ifndef _SPRITEGROUP_H_
#define _SPRITEGROUP_H_

#include "sprite.h"
#include <vector>

/** Grupo de sprites
 * Permite gestionar colisiones, redraws
 * y updates por grupos. Indexa los sprites
 * por nombre
 */ 

class SpriteGroup
{
	public:
		//! Constructor
		SpriteGroup();
		//! Destructor
		~SpriteGroup();
		
		//! Borra todos los sprites del grupo, borrando su memoria asignada.
		void destroyAll();
		//! Actualiza todos los sprites del grupo
		void updateAll(unsigned int time_delta);
		//! Dibuja todos los sprites del grupo
		void drawAll(SDL_Surface *surf);
		//! Calcula colisiones de un sprite con el grupo actual
		bool collideAll(Sprite *spr,
				std::vector<Sprite *> &sprlist,
				std::vector<SDL_Rect> &rectlist);

		//! Ejecuta la funcion func para cada sprite
		void forEach(void (*func)(Sprite *, void *), void *data);

		//! Ejecuta func si existe una colision
		void forEachCollided(void (*func)(Sprite *, Sprite *, SDL_Rect, void *),
					 Sprite *spr, void *data);

		std::vector<Sprite *> group;
};

#endif
/* ex: set cindent expandtab softtabstop=4 shiftwidth=4 tabstop=4: */
